这段代码是Haru Free PDF Library中关于列表（List）操作的头文件 `hpdf_list.h`。它定义了PDF文档中列表数据结构的操作相关的数据结构和函数原型。以下是对代码的详细解释：

1. **版权声明**：注释块提供了Haru PDF库的版权信息。

2. **宏定义**：`#ifndef _HPDF_LIST_H` 和 `#define _HPDF_LIST_H` 用于防止头文件被多次包含。

3. **包含其他头文件**：
   - `#include "hpdf_error.h"` 包含了处理错误所需的头文件。
   - `#include "hpdf_mmgr.h"` 包含了处理内存管理的头文件。

4. **C++兼容性**：条件编译指令，确保当使用C++编译器时，这些函数以C的方式进行链接。

5. **列表记录结构体定义**：
   - `_HPDF_List_Rec` 结构体定义了列表的内部结构，包括内存管理器、错误记录、块大小、每个块的项目数、项目计数和项目对象指针数组。

6. **列表类型定义**：
   - `HPDF_List` 是指向 `_HPDF_List_Rec` 结构体的指针。

7. **列表操作函数原型**：
   - `HPDF_List_New`：创建一个新的列表对象。
   - `HPDF_List_Free`：释放列表对象资源。
   - `HPDF_List_Add`：向列表添加一个项目。
   - `HPDF_List_Insert`：在指定位置插入一个项目。
   - `HPDF_List_Remove`：从列表中移除一个项目。
   - `HPDF_List_RemoveByIndex`：根据索引移除并返回一个项目。
   - `HPDF_List_ItemAt`：获取指定索引的项目。
   - `HPDF_List_Find`：在列表中查找项目的位置。
   - `HPDF_List_Clear`：清空列表中的所有项目。

8. **结束C++兼容性条件编译**：`#ifdef __cplusplus` 和 `#endif /* __cplusplus */` 结束C++兼容性代码块。

9. **结束宏定义**：`#endif /* _HPDF_LIST_H */` 结束头文件的宏定义。

这个头文件提供了在PDF文档中操作列表的功能，包括创建、添加、插入、移除、查找和清空列表中的项目。这对于管理PDF文档中的各种集合对象非常有用，例如页面集合、注释集合等。/*
 * << Haru Free PDF Library >> -- hpdf_list.h
 *
 * URL: http://libharu.org
 *
 * Copyright (c) 1999-2006 Takeshi Kanno <takeshi_kanno@est.hi-ho.ne.jp>
 * Copyright (c) 2007-2009 Antony Dovgal <tony@daylessday.org>
 *
 * Permission to use, copy, modify, distribute and sell this software
 * and its documentation for any purpose is hereby granted without fee,
 * provided that the above copyright notice appear in all copies and
 * that both that copyright notice and this permission notice appear
 * in supporting documentation.
 * It is provided "as is" without express or implied warranty.
 *
 */

#ifndef _HPDF_LIST_H
#define _HPDF_LIST_H

#include "hpdf_error.h"
#include "hpdf_mmgr.h"

#ifdef __cplusplus
extern "C" {
#endif

typedef struct _HPDF_List_Rec  *HPDF_List;

typedef struct _HPDF_List_Rec {
      HPDF_MMgr       mmgr;
      HPDF_Error      error;
      HPDF_UINT       block_siz;
      HPDF_UINT       items_per_block;
      HPDF_UINT       count;
      void            **obj;
} HPDF_List_Rec;


HPDF_List
HPDF_List_New  (HPDF_MMgr  mmgr,
                HPDF_UINT  items_per_block);


void
HPDF_List_Free  (HPDF_List  list);


HPDF_STATUS
HPDF_List_Add  (HPDF_List  list,
                void       *item);


HPDF_STATUS
HPDF_List_Insert  (HPDF_List  list,
                   void       *target,
                   void       *item);


HPDF_STATUS
HPDF_List_Remove  (HPDF_List  list,
                   void       *item);


void*
HPDF_List_RemoveByIndex  (HPDF_List  list,
                          HPDF_UINT  index);


void*
HPDF_List_ItemAt  (HPDF_List  list,
                   HPDF_UINT  index);


HPDF_INT32
HPDF_List_Find  (HPDF_List  list,
                 void       *item);


void
HPDF_List_Clear  (HPDF_List  list);

#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif /* _HPDF_LIST_H */

